如何调用MATLAB自带的BP神经网络工具箱 您所在的位置:网站首页 颜文字 翅膀 如何调用MATLAB自带的BP神经网络工具箱

如何调用MATLAB自带的BP神经网络工具箱

2023-06-14 13:01| 来源: 网络整理| 查看: 265

       BP神经网络是非常经典且好用的一种学习数据内在规律的拟合-预测模型,具有很强的线性和非线性的映射能力. BP神经网络属于人工神经网络(Artificial Neural Network, ANN)的一种, BP是Back  Propagation的缩写,意为反向传播. 反向传播的本质为误差是向后传播, 进而调整神经元的参数. 1943年McCulloch, W.S. 和 W. Pitts[1]最早提出了神经元的数学模型, 1974年Paul J. Werbos[2]正式提出了BP神经网络训练算法, 到目前BP神经网络广泛用于各种预测和控制模型, 已经有数十年的历史,取得了很好的效果. 

       本文的主旨不在于研究BP神经网络的历史和原理, 主要着眼于其实际使用方法, 下面我们先看调用MATLAB自带的BP神经网络工具箱的代码.

      本代码总体流程:

      (1)首先随机产生200组维度为2的输入数据X, 对X的2维数据求和后加上随机噪声,得到输出数据Y;

       (2)然后定义训练集和测试集, 就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络;

      (3)对数据进行归一化处理, BP神经网络要求对数据进行归一化处理, 这样预测效果是最理想的;

      (4)设置BP神经网络的参数

      (5)训练BP神经网络,并输出训练误差曲线

      (6)测试BP神经网络,并输出测试结果

%% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979 %% BP神经网络 clc;close all;clear all;warning off;%清除变量 rand('seed', 100); randn('seed', 100); format long g;

%%  (1)首先随机产生200组维度为2的输入数据X, 对X的2维数据求和后加上随机噪声,得到输出数据Y X1=rand(2,200); Y1=sum(X1)+5; Y1=Y1.*(1+(-0.05+0.1*rand(size(Y1))));

%% (2)定义训练集和测试集, 就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络;

n1=size(Y1,2); I1=1:n1;%顺序样本 n2=20;%用于测试的样本个数 indextraindata=I1(1:end-n2); indextestdata=I1(end-n2+1:end);

% 定义训练集 P1data=X1(:,indextraindata); T1data=Y1(:,indextraindata); % 定义测试集 P2data=X1(:,indextestdata); T2data=Y1(:,indextestdata);

%% (3)对数据进行归一化处理 % 训练数据归一化 [input_traindata,inputps]=mapminmax(P1data); [output_traindata,outputps]=mapminmax(T1data); %测试数据归一化 input_testdata=mapminmax('apply',P2data,inputps);

%%(4)设置BP神经网络的参数 hidnumber=10;% 设置隐含测节点数 net_new=newff(input_traindata,output_traindata,hidnumber);%新建BP神经网络net % 设置神经网络的参数 net_new.trainparam.epochs=1000;% 设置训练次数 net_new.trainparam.goal=0.000000001;% 设置目标精度 net_new.trainparam.lr=0.1;% 设置学习率 net_new.trainFcn='traingd';% 设置训练函数梯度下降 net_new.divideFcn ='';

%% (5)训练BP神经网络,并输出训练误差曲线 [net_new,tr]=train(net_new,input_traindata,output_traindata);% 训练模型

msedata=tr.perf;% 训练误差 epochs201=tr.epoch;% 训练次数

% 绘制训练误差曲线

figure; semilogy(epochs201,msedata); xlabel('训练次数','fontname','宋体'); ylabel('训练误差','fontname','宋体'); title('训练误差曲线','fontname','宋体');

%% (6)测试BP神经网络,并输出测试结果 input_traindata0=input_traindata(:,1:length(indextraindata)); ybptraindata=sim(net_new,input_traindata0); ybptraindata=mapminmax('reverse',ybptraindata,outputps);%预测数据反归一化

ybptestdata=sim(net_new,input_testdata); ybptestdata=mapminmax('reverse',ybptestdata,outputps);%预测数据反归一化

%% 输出结果 msedata=tr.perf; disp('BP神经网络训练的RMSE'); sqrt(msedata(end))

disp('训练集样本编号'); indextraindata disp('测试集样本编号'); indextestdata

disp('实际值'); T2data disp('预测结果'); ybptestdata

figure; plot(T2data,'bo-'); hold on; plot(ybptestdata,'r*-'); legend({'实际值','BP预测值'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('目标值','fontname','宋体'); title('预测结果','fontname','宋体');

figure; plot(ybptestdata-T2data,'bo-'); legend({'绝对误差'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('绝对误差','fontname','宋体'); title('绝对误差','fontname','宋体');

figure; plot((ybptestdata-T2data)./T2data*100,'bo-'); legend({'相对误差'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('相对误差(%)','fontname','宋体'); title('相对误差','fontname','宋体');

disp('本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979'); %% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979

代码运行的结果如下:  

有讨论的可以加我q :1579325979

参考文献:

[1]McCulloch, W.S. and W. Pitts, A logical calculus of the ideas immanent in nervous activity. The bulletin of mathematical biophysics, 1943. 5(4): p. 115-133.

[2]Werbos, P., Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Science. Thesis (Ph. D.). Appl. Math. Harvard University. 1974.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有